var xiaoming = {
    name: '小明', age: 14, gender: true, height: 1.65, grade: null, 'middle-school': '\"W3C\" Middle School',
    skills: ['JavaScript', 'Java', 'Python', 'Lisp']
};
//================================================================
// JSON.stringify()	用于将 JavaScript 值转换为 JSON 字符串
console.log(JSON.stringify(xiaoming));  // '{"name":"小明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\" Middle School","skills":["JavaScript","Java","Python","Lisp"]}'
console.log(JSON.stringify(xiaoming, null, '    '));  // 格式化输出, null 表示全部输出, 四个空格表示缩进的空格数
console.log(JSON.stringify(xiaoming, ['name', 'skills'], '  '));  // 只输出 name 和 skill, 第二个参数用于控制如何筛选对象的键值, 可以传入 Array
function convert(key, value) { if (typeof value === 'string') { return value.toUpperCase(); } return value; }
console.log(JSON.stringify(xiaoming, convert, '  '));  // 传入函数, 进行筛选
//================================================================
// toJSON 方法, 类似于 toString
var xiaoming = {
    name: '小明', age: 14, gender: true,
    toJSON: function () { return { 'Name': this.name, 'Age': this.age }; }
};
console.log(JSON.stringify(xiaoming));  // '{"Name":"小明","Age":14}'
//================================================================
// 反序列化, JSON.parse() 把 JSON 格式的字符串变成一个 JavaScript 对象
console.log(JSON.parse('[1,2,3,true]'));  // [1, 2, 3, true]
console.log(JSON.parse('{"name":"小明","age":14}'));  // Object {name: '小明', age: 14}
console.log(JSON.parse('true'));  // true
console.log(JSON.parse('123.45'));  // 123.45
console.log(  // JSON.parse() 还可以接收一个函数, 用来转换解析出的属性
    JSON.parse('{"name":"小明","age":14}', function (key, value) {
        if (key === 'name') { return value + '同学'; }
        return value;
}));  // Object {name: '小明同学', age: 14}
